package com.zyf;
/**
 * 3 删除排序数组中的重复项
 * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度

示例 1 
给定数组 nums ={1,1,2};
函数应该返回新的长度 2,并且原数组 nums的前两个元素被修改为 1,2
你不需要考虑数组中超出新长度后面的元素

示例 2 
给定 nums={0,0,1,1,1,2,2,3,3,4};
函数应该返回新的长度 5 ,并原数组 nums的前5个元素被修改为 0,1,2,3,4
你不需要考虑数组中超出新长度后面的元素


 */
import java.util.Scanner;

public class _03_duplicate {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		System.out.println("输入一个数组长度 : " );
		int n = sc.nextInt();
		int[] arr1 = new int[n];
		System.out.println("输入一个长度为 " + n +"的数组 : " );
		for (int i = 0; i < arr1.length; i++) {
			arr1[i] = sc.nextInt();
		}
		int m = duplicate(arr1);
		System.out.println("新的数组长度为 : " + m);
		System.out.println("新的数组为 :");
		for (int i = 0; i < m; i++) {
			System.out.print(arr1[i] + " ");
		}
	}
	//1  2  2  3 4  4  5  5 
	/**
	 * 删除排序数组中的重复项方法
	 * @param arr1
	 * @return 新的数组长度
	 * 
	 * 思路:length表示插入位置,初始值为1
	 * 第一次循环只要比较i指向的第二个元素和length的前一个元素
	 * 值不一样将arr1[i]的值插入到length的位置即可
	 * 循环结束后就是去重的数组
	 * 返回length
	 * 输出前length个数组中的数据
	 */
	private static int duplicate(int[] arr1) {
		int length = 1;//length表示插入判断的位置
		for (int i = 1; i < arr1.length; i++) {
			if (arr1[i] != arr1[length-1]) {
				arr1[length] = arr1[i];
				length++;
			}
		}
		return length;
		
	}

}
